﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed
#pragma once

#include "IUnCommandControlDefinition.h"

namespace gcmp
{
    class IControlState;
    class IProgressBarHandler;
    /// \brief 进度条控件数据定义接口
class GCMP_GUI_BASE_INTERFACE_EXPORT IProgressBarDefinition : public IUnCommandControlDefinition
{
public:
    /// \brief 创建IProgressBarDefinition对象
    ///
    /// \param id       IProgressBarDefinition的Id,需保证唯一性
    /// \param caption    ProgressBar控件标题
    /// \param tooltip    tooltip提示文字
    /// \param width     进度条宽度
    /// \return  创建出IProgressBarDefinition对象。失败时返回空指针
    static OwnerPtr<IProgressBarDefinition> Create(const std::wstring& id, const std::wstring& caption, const std::wstring& tooltip, int width = 50);

    /// \brief 创建pProgressBarDefinition的引用对象
    ///
    /// 不能通过引用创建引用； pProgressBarDefinition需加到IControlDefinitionLibrary时才能创建引用对象
    /// \param pProgressBarDefinition 被引用的IProgressBarDefinition对象
    /// \return pProgressBarDefinition的引用对象
    static OwnerPtr<IProgressBarDefinition> CreateReference(const IProgressBarDefinition* pProgressBarDefinition);
   
    /// \brief 得到进度条上显示的进度（0-100）
    virtual int GetValue() const = 0;

    /// \brief 设置进度条的进度
    ///
    /// \param value   进度值（0-100）
    /// \return true表示成功，false表示失败
    virtual bool SetValue(int value) = 0;

    /// \brief 得到当前完成进度的显示状态
    ///
    /// \return true表示显示文字，false表示不显示文字
    virtual bool GetTextVisible() const = 0;

    /// \brief 设置当前完成进度是否显示
    ///
    /// \param visible true表示显示文字，false表示不显示文字
    virtual bool SetTextVisible(bool visible) = 0;

    /// \brief 得到进度条的宽度
    virtual int GetWidth() const = 0;

    /// \brief 设置进度条的宽度
    /// \param width   将要设置的宽度
    /// \return true表示设置成功，false设置失败
    virtual bool SetWidth(int width) = 0;

    /// \brief 设置ProgressBar的可见及可用状态
    ///
    /// \param pControlHandler 控件状态对象
    /// \return     true表示成功，false表示失败
    virtual bool SetControlHandler(OwnerPtr<IProgressBarHandler> pControlHandler) = 0;

    /// \brief 设置控件是否可见,默认是可见的（相关代码会调整，请勿使用）
    ///
    /// 通过SetControlState设置后，SetVisible将不起作用
    /// \param visable  true表示设置可见，false表示设置不可见
    /// \return  设置成功返回true，否则返回false
    virtual bool SetVisible(bool visable) = 0;
};

}   // end namespace gcmp
